import { defineStore } from "pinia";

// defineStore(id, options) 定义pinia模块
// id 模块名称（唯一），会在开发者调试工具中显示这个名称
export const useCounterStore = defineStore("counter", {
  // state必须是函数形式
  // 函数必须返回一个对象
  state: () => {
    return {
      count: 0,
      person: {
        age: 18,
      },
    };
  },
  // 只读计算属性数据
  getters: {
    oddOrEven(state) {
      return (state.count & 1) === 1 ? "奇数" : "偶数";
    },
  },
  // 没有mutations
  // 之前在mutations中完成的操作，都在actions中完成
  // actions即需要发送请求，又需要更新数据
  actions: {
    // actions接受n个参数，所有的参数都是组件触发action函数传递的参数
    // 组件触发action函数传递的参数，就是action函数的参数
    increment(num: number, ...rest: number[]) {
      console.log(rest);
      // 可以通过this直接访问当前模块的数据
      this.count += num;
    },
  },
});
